package function;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;

public class IsValidType {
    public static boolean isValidType(String value, String dataType) {
        switch (dataType) {
            case "int":
                return isInteger(value);
            case "varchar":
                return isString(value);
            case "date":
                return isValidDate(value);
            case "float":
                return isFloat(value);
            case "double":
                return isDouble(value);
            case "boolean":
                return isBoolean(value);
            // 添加其他类型的验证
            default:
                return false;
        }
    }

    public static boolean isTypeName(String tmp) {
        switch (tmp) {
            case "int":
            case "varchar":
            case "date":
            case "float":
            case "double":
            case "boolean":
                return true;
            // 添加其他类型的验证
            default:
                return false;
        }
    }

    // 验证是否为整数
    private static boolean isInteger(String value) {
        try {
            Integer.parseInt(value);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    // 验证是否为字符串
    private static boolean isString(String value) {
        return value != null && !value.isEmpty();
    }

    // 验证是否为日期
    public static boolean isValidDate(String value) {
        if (!value.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
            return false;
        } else {
            String[] parts = value.split("-");
            String formattedDate = String.format("%s-%02d-%02d", parts[0], Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
            try {
                LocalDate.parse(formattedDate);
                return true;
            } catch (DateTimeParseException e) {
                return false;
            }
        }
    }


    // 验证是否为浮点数（float）
    private static boolean isFloat(String value) {
        try {
            Float.parseFloat(value);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    // 验证是否为双精度浮点数（double）
    private static boolean isDouble(String value) {
        try {
            Double.parseDouble(value);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    // 验证是否为布尔值（boolean）
    private static boolean isBoolean(String value) {
        return "true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value);
    }
}
